package com.zjsru.oneDay;

import java.util.Arrays;

/**
 * 2294. 划分数组使最大差为 K
 *
 * @Author: cookLee
 * @Date: 2025-06-19
 */
public class PartitionArray {

    /**
     * 主
     * \
     * 输入：nums = [3,6,1,2,5], k = 2
     * 输出：2
     * 解释：
     * 可以将 nums 划分为两个子序列 [3,1,2] 和 [6,5] 。
     * 第一个子序列中最大值和最小值的差值是 3 - 1 = 2 。
     * 第二个子序列中最大值和最小值的差值是 6 - 5 = 1 。
     * 由于创建了两个子序列，返回 2 。可以证明需要划分的最少子序列数目就是 2 。
     * \
     * 输入：nums = [1,2,3], k = 1
     * 输出：2
     * 解释：
     * 可以将 nums 划分为两个子序列 [1,2] 和 [3] 。
     * 第一个子序列中最大值和最小值的差值是 2 - 1 = 1 。
     * 第二个子序列中最大值和最小值的差值是 3 - 3 = 0 。
     * 由于创建了两个子序列，返回 2 。注意，另一种最优解法是将 nums 划分成子序列 [1] 和 [2,3] 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        int[] nums = new int[]{3, 6, 1, 2, 5};
        System.out.println(new PartitionArray().partitionArray(nums, 2));
    }


    /**
     * 贪心
     *
     * @param nums nums
     * @param k    k
     * @return int
     */
    public int partitionArray(int[] nums, int k) {
        Arrays.sort(nums);
        int count = 1;
        int init = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] - init > k) {
                init = nums[i];
                count++;
            }
        }
        return count;
    }


}
